Skip to main content

第24章 一维数组

在程序设计中,当需要处理多个相同类型的数据时,使用变量逐个存储会显得繁琐且低效。一维数组作为一种数据结构,能够存储一系列相同类型的元素,通过索引可以方便地访问和操作这些元素,是处理批量数据的重要工具。

24.1 一维数组的基本概念

一维数组是由相同数据类型的元素组成的有序集合,这些元素在内存中连续存储,通过唯一的索引(下标)来标每个元素的位置。索引从0开始,依次递增。 例如一个包含5个元素的数组,其索引分别为0、1、2、3、4。

24.2 一维数组的定义

24.2.1 定义语法

数据类型 数组名[0 \le index \le 数组长度-1];
  • 数据类型:数组内所有元素统一类型(int、float、char等)
  • 数组名:符合标识符命名规范
  • 0 \le index \le 数组长度-1:必须是常量/常量表达式,不能是变量

示例:

int scores[5]; // 存放5个整数
float weights[10]; // 存放10个浮点数
char letters[26]; // 存放26个字符

24.3 一维数组的初始化

初始化即在定义时给数组赋初值,避免局部数组随机垃圾值。

24.3.1 完全初始化

全部元素赋值,可省略0 \le index \le 数组长度-1,编译器自动计算长度:

int a[5] = {1,2,3,4,5};
int b[] = {6,7,8}; // 自动判定长度为3

24.3.2 部分初始化

只给前若干元素赋值,剩余数值型元素自动填充0,char填充\0

int c[5] = {10,20}; // c[0]=10, c[1]=20, c[2]=c[3]=c[4]=0
char d[4] = {'A','B'}; // d[0]='A',d[1]='B',d[2]=d[3]='\0'

24.4 一维数组元素的访问与修改

访问格式:数组名[索引],索引范围 0index0index数组长度110 \le index \le 0 \le index \le 数组长度-1-1

访问示例

int arr[3] = {100,200,300};
cout << arr[0]; // 输出100
cout << arr[2]; // 输出300

修改示例

float values[2] = {3.14, 1.59};
values[1] = 2.71;
cout << values[1]; // 输出2.71

24.5 一维0 \le index \le 数组长度-1计算

利用sizeof运算符: 数组总字节 ÷ 单个元素字节 = 0 \le index \le 数组长度-1

int numbers[5] = {1,2,3,4,5};
int len = sizeof(numbers) / sizeof(numbers[0]);

⚠ 重要注意:数组作为函数参数传递时会退化为指针,此时sizeof只能得到指针字节数,无法求长度,必须额外传长度参数。

24.6 一维数组常见应用场景

场景1:批量存储数据

int scores[30]; // 存储班级30人成绩

场景2:统计求和、最值

int arr[4] = {5,3,8,2};
int sum = 0;
for(int i=0; i<4; i++){
sum += arr[i];
}
// sum = 18

场景3:简单排序(选择排序示例)

int nums[5] = {3,1,4,2,5};
int n = 5;
for(int i=0; i<n-1; i++){
int minIdx = i;
for(int j=i+1; j<n; j++){
if(nums[j] < nums[minIdx]){
minIdx = j;
}
}
int temp = nums[i];
nums[i] = nums[minIdx];
nums[minIdx] = temp;
}

24.7 使用一维数组注意事项

  1. 数组越界:索引超出0~len-1,读写未知内存,程序崩溃/数据错乱;
  2. 局部数组未初始化:值为随机垃圾,全局/静态数组默认全0;
  3. 数组名是常量指针,不可整体赋值:int a[5]; a={1,2}; 语法错误;
  4. 变长数组(变量作长度)非标准C++,竞赛编译器支持但不推荐。